home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / listman.d < prev    next >
Text File  |  1997-10-26  |  8KB  |  192 lines

  1. DEFINITION MODULE ListMan;
  2.  
  3. FROM SYSTEM     IMPORT ADDRESS;
  4.  
  5.  
  6. FROM MagicSys   IMPORT sBITSET, sINTEGER, lINTEGER;
  7.  
  8. FROM GrafBase   IMPORT Rectangle;
  9.  
  10. (* Handelt scrollbare Listen in Fenstern und Dialogboxen *)
  11.  
  12. (*$H+ auch lokale Funktionen m”glich *) 
  13. (*$Z+ *) 
  14. TYPE
  15.         selectEntryProc = PROCEDURE ( (* entry: *) ADDRESS,
  16.                                       (* env:   *) ADDRESS,
  17.                                       (* line:  *) INTEGER) : BOOLEAN;
  18.         (* Wird aufgerufen, wenn ein Eintrag selektiert wurde.
  19.          * Gibt zurck, ob der Dialog verlassen werden soll,
  20.          * falls es in einem Dialog ist.
  21.          * TRUE = verlassen
  22.          *)
  23.  
  24.         isSelectedProc  = PROCEDURE ( (* entry: *) ADDRESS,
  25.                                       (* env:   *) ADDRESS) : BOOLEAN;
  26.         (* Wird aufgerufen, um festzustellen, ob ein Eintrag selektiert 
  27.          * ist oder nicht 
  28.          *)
  29.  
  30.         entryIsSelectableProc  = PROCEDURE ( (* entry, env: *) ADDRESS, ADDRESS) : BOOLEAN;
  31.         (* Wird aufgerufen, um festzustellen, ob ein Eintrag disabled ist oder nicht *)
  32.         
  33.         drawEntryProc          = PROCEDURE ( (* entry: *) ADDRESS,
  34.                                              (* env:   *) ADDRESS,
  35.                                              (* x:     *) sINTEGER,
  36.                                              (* y:     *) sINTEGER,
  37.                                              (* offset:*) sINTEGER,
  38.                                              (* clip:  *) Rectangle);
  39.         (* Wird aufgerufen, um einen Eintrag zu zeichen. 
  40.          * x und y enthalten die Position, offset ist ein "Offset" vom linken
  41.          * Rand aus, cliprect muž bercksichtigt werden!
  42.          * Wenn der entry NIL ist, dann muž ein leeres Rechteck gezeichnet 
  43.          * werden
  44.          *)
  45.   
  46.         selectMode      = (smNone, smOne, smMulti);
  47.               
  48.   (* Listenverwaltung auch ber Prozedurvariablen *)
  49.   
  50.   TYPE  ResetProc       = PROCEDURE ( (* list : *) ADDRESS);
  51.         (* Setzt Liste zurck auf Anfang *)
  52.         
  53.         MoveProc        = PROCEDURE ( (* list : *) ADDRESS) : ADDRESS;
  54.         (* Liefert n„chstes oder vorheriges Element, 
  55.          * NIL ansonsten
  56.          *)
  57.         
  58.         CountProc       = PROCEDURE ( (* list : *) ADDRESS,
  59.                                      VAR (* length *) lINTEGER,
  60.                                      VAR (* width *)  sINTEGER);
  61.         (* Gibt die Anzahl der Eintr„ge und die Breite der 
  62.          * Liste zurck *)
  63.   
  64.   TYPE LISTINFO;
  65.  
  66. PROCEDURE InitList (list : ADDRESS; 
  67.                     env  : ADDRESS;
  68.                     selectEntry       : selectEntryProc;
  69.                     isSelectedEntry   : isSelectedProc;
  70.                     isSelectableEntry : entryIsSelectableProc;
  71.                     drawEntry         : drawEntryProc;
  72.                     resetList         : ResetProc;
  73.                     nextList,
  74.                     prevList          : MoveProc;
  75.                     countList         : CountProc;
  76.                     select            : selectMode;
  77.                     VAR listInfo      : LISTINFO): BOOLEAN;
  78.  
  79. (* Von den beiden folgenden Prozeduren muž mindestens eine nach 
  80.  * der Initialisierung der Liste aufgerufen werden
  81.  *)
  82.  
  83. PROCEDURE SetListWdwSpecs (listInfo: LISTINFO; 
  84.                            wdwHandle  : sINTEGER;
  85.                            area       : Rectangle;
  86.                            voffset    : sINTEGER;
  87.                            vsize      : sINTEGER;
  88.                            hstep      : sINTEGER;
  89.                            maxwidth   : sINTEGER): BOOLEAN;
  90. (* Setzt weitere Informationen fr die Liste. 
  91.  * wdwHandle: Das Fenster, in dem die Liste dargestellt wird
  92.  * area: Arbeitsbereich, in dem die Liste dargestellt wird
  93.  * voffset: Abstand zwischen zwei Eintr„gen
  94.  * vsize  : H”he eines Eintrages
  95.  * hstep  : Wie breit ist eine Spalte
  96.  * maxwidth: maximale Breite eines Eintrags
  97.  *)
  98.  
  99. PROCEDURE SetListDialSpecs(listInfo: LISTINFO; 
  100.                            tree       : ADDRESS;
  101.                            entryBox   : sINTEGER;
  102.                            boxBack    : sINTEGER;
  103.                            voffset    : sINTEGER;
  104.                            vsize      : sINTEGER;
  105.                            hstep      : sINTEGER;
  106.                            maxwidth   : sINTEGER): BOOLEAN;
  107. (* Setzt weitere Informationen fr die Liste. 
  108.  * tree: Der Baum, in dem die Liste dargestellt wird
  109.  * entryBox: Objektindex fr das Objekt, in dem alle Objekte 
  110.  *           dargestellt werden
  111.  * boxBack: Objektindex des Hintergrundes der Box (fr Slider)
  112.  * voffset: Abstand zwischen zwei Eintr„gen
  113.  * vsize  : H”he eines Eintrages
  114.  * hstep  : Wie breit ist eine Spalte
  115.  * maxwidth: maximale Breite eines Eintrags (wenn = 0, dann wird kein
  116.  * horizontaler Slider eingesetzt)
  117.  *)
  118.  
  119. PROCEDURE FreeList (listInfo: LISTINFO): BOOLEAN;
  120.  
  121. PROCEDURE DrawList (listInfo: LISTINFO; clip: Rectangle);
  122. (* Zeichnet die Liste neu und auch die Slider, Clipping wird
  123.  * beachtet
  124.  *)
  125.  
  126. PROCEDURE ListClick (listInfo: LISTINFO; x, y: INTEGER; kstate: BITSET; 
  127.                      clicks: sINTEGER): lINTEGER;
  128.  
  129. (* Wird aufgerufen, wenn ein Mausklick stattfand. Gibt zurck,
  130.  * ob ein Eintrag angeklickt wurde (>= 0) oder ob 
  131.  * der Click aužerhalb des Bereiches war (-1)
  132.  * oder ob der Click behandelt wurde (-2)
  133.  * Wenn ein Eintrag angeklickt wurde, dann wird dieser auch selektiert,
  134.  * falls notwendig.
  135.  *)
  136.  
  137. PROCEDURE ListUpdateEntry (listInfo : LISTINFO; entry: lINTEGER);
  138. (* Einen bestimmten Eintrag neu zeichnen lassen, falls n”tig
  139.  *)
  140. PROCEDURE ListInvertEntry (listInfo: LISTINFO; entry: lINTEGER);
  141. (* Der Eintrag entry wurde (extern) selektiert, den Rest handhaben
  142.  * Ntzlich fr Autolocator
  143.  *)
  144.  
  145. PROCEDURE ListDeselEntry (listInfo: LISTINFO; entry: lINTEGER);
  146. (* Deselektiert den Eintrag entry. Ebenfalls fr Autolocator
  147.  *)
  148.  
  149. PROCEDURE ListScroll2Selection (listInfo: LISTINFO; draw: BOOLEAN);
  150. (* Scrollt die Liste so, daž der erste selektierte Eintrag 
  151.  * sichtbar ist.  draw: auch wirklich zeichnen!
  152.  *)
  153.  
  154. PROCEDURE ListPgDown (listInfo : LISTINFO);
  155. PROCEDURE ListLnDown (listInfo : LISTINFO);
  156. PROCEDURE ListPgUp   (listInfo : LISTINFO);
  157. PROCEDURE ListLnUp   (listInfo : LISTINFO);
  158. PROCEDURE ListLnRight (listInfo: LISTINFO);
  159. PROCEDURE ListPgRight (listInfo: LISTINFO);
  160. PROCEDURE ListLnLeft (listInfo : LISTINFO);
  161. PROCEDURE ListPgLeft (listInfo : LISTINFO);
  162. PROCEDURE ListFirst (listInfo: LISTINFO);
  163. PROCEDURE ListLast (listInfo: LISTINFO);
  164.  
  165. (* Selektion innerhalb der Liste verschieben *)
  166. PROCEDURE ListSelUp (listInfo: LISTINFO): lINTEGER;
  167. PROCEDURE ListSelPgUp (listInfo: LISTINFO): lINTEGER;
  168. PROCEDURE ListSelDown (listInfo: LISTINFO): lINTEGER;
  169. PROCEDURE ListSelPgDown (listInfo: LISTINFO): lINTEGER;
  170. PROCEDURE ListSelFirst (listInfo: LISTINFO): lINTEGER;
  171. PROCEDURE ListSelLast  (listInfo: LISTINFO): lINTEGER;
  172.  
  173. PROCEDURE ListListElems (listInfo: LISTINFO): lINTEGER;
  174. (* Gibt die Anzahl der Listenelemente zurck 
  175.  *)
  176.  
  177. PROCEDURE ListFindEntry (listInfo: LISTINFO; index : lINTEGER) : ADDRESS;
  178. (* Gibt die Adresse des Eintrags index zurck 
  179.  *)
  180.  
  181. PROCEDURE ListFirstSelected (listInfo: LISTINFO) : lINTEGER;
  182. (* GIbt den ersten selektieren Eintrag zurck, -1 im Fehlerfall
  183.  *)
  184.  
  185. (* Die Funktionen brauche ich gar nicht:
  186. (* Neue Position in der Liste setzen. Pos: 0..1000 *)
  187. PROCEDURE ListVSlide (listInfo : LISTINFO; pos: sINTEGER);
  188. PROCEDURE ListHSlide (listInfo : LISTINFO; pos: sINTEGER);
  189. *)
  190.  
  191. END ListMan.
  192.